#!/usr/bin/env bash
#-------------------------------------------------------
#	FileName	: WriteIni.sh
#	Author		：hpy
#	Date		：2020年11月08日
#	Description	：写ini文件的函数
#------------------------------------------------------- 

#-----------------------------------------
#函数名：WriteIni
#功能：增加，改写ini文件，若不存在指定元素
#自动添加，存在则更改，操作成功返回状态码0，
#否则返回状态码2
#@param1：ini文件路径
#@param2：Section
#@param3：Option
#@param4：value
#例如：WriteIni test.ini s2 Path value
#-----------------------------------------
function WriteIni(){
    fid=$1
    section=$2
    option=$3
    value=$4
    if [ ${fid#*.} != ini ] ; then  
        echo "不是ini文件" 
        return 2 
    fi 
    test ! -f $fid && echo "不存在文件$fid" && return 2
    if [ $# -eq 4 ] ; then
        local src=$(cat $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f')  #先搜寻是否存在option
        if [ ${#src} -eq 0 ] ;then #没有匹配到section，直接新建并添加内容
            echo "[$section]" >> $fid
            echo "    $option = $value"  >> $fid
            return 0
        else
            local src=$(cat -n $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | grep $option | grep '=')
            if [  ${#src} -eq 0 ] ; then #没有对应的 option 直接添加
                local last=$(cat -n $fid | awk '/\['$section'\]/{f=1;next} /\[*\]/{f=0} f' | tail -n 1)
                last=$(echo $last | cut -d' ' -f1)
                sed -i "${last}a\    $option=$value" $fid 
                return 0
            fi 
            local old_value=$(echo $src | cut -d'=' -f2 |cut -d'#' -f1 | cut -d';' -f1  )
            local idx=$(echo $src | cut -d' ' -f1)
            local newcontext="$(cat $fid|sed -n "${idx}p" |  sed "s/$old_value/$value/" |  awk '{gsub(/^\s+|\s+$/, "");print}')"
            sed -i "${idx}c\    $newcontext" $fid
            return 0       
        fi  
    fi 
}


WriteIni test.ini s3 Go baby
test $? -eq 0 && echo "写入成功" || echo "写入失败"